package com.slt.jvm.mashibing.c2_classloader;
/**
 * 访问静态变量 开始加载T
 * loading
 * linking ：
 *  verficaton
 *  preparation ： 静态变量赋默认值
 *  resolution
 *
 * initializing:静态变量赋初始值
 */
public class T001_ClassLoadingProcedure {
    public static void main(String[] args) {
        /**
         * 1.第1种情况测试
         */
        System.out.println(T.count);
//        new T();


        /**
         * 第二种情况测试
         */
//        System.out.println(T2.count);
//        new T2();
    }
}

class T {
    /**
     *
     * 1.执行到linking的 preparation阶段时候，此时t是null，count是默认值0
     * 2.执行到initializing时候，开始给静态变量赋初始值
     * 3.new T 就会调用构造器
     */
    public static T t = new T();
    public static int count = 2;

    /**
     * 类加载完了，实例变量分配内存，进行初始化。但是此时类还没有初始化。
     */
    private int m = 8;

    T() {
        System.out.println("m--" + m);
        System.out.println("count--" + count);
        count ++;
        System.out.println("count--" + count);
    }
}

class T2 {
    public static int count = 2;
    /**
     *
     * 1.执行到linking的 preparation阶段时候，此时t是null，count是默认值0
     * 2.执行到initializing时候，开始给静态变量赋初始值
     * 3.new T 就会调用构造器
     */
    public static T2 t = new T2();


    /**
     * 类加载完了，实例变量分配内存，进行初始化。但是此时类还没有初始化。
     */
    private int m = 8;


    T2() {
        System.out.println("m " + m);
        System.out.println("count " + count);
        count ++;
        System.out.println("count " + count);
    }
}